def path(des,x,y,w):
    paths = list(zip(x, y, w))  # 这里之前犯了一个错，因为zip返回一个生成器会导致遍历不完全
    ret = []
    def myloop(station=0, log=[], danger=0):
        # station表示当前位置，log表是路径记录， danger表示最大危险值
        for p in paths:
            # print(p, station, des)
            # 如果当前的路径包含终点就结束搜索
            if p[0] == station and p[1] == des:
                tmp = log[:]
                tmp.append(station)
                tmp.append(p[1])
                if danger < p[2]:
                    danger = p[2]
                ret.append((tmp, danger))
            # 否则就把当前的危险值和最大值比较，如果比最大值大那么就替换掉当前的最大值
            elif p[0] == station:
                tmp = log[:]
                tmp.append(station)
                if danger < p[2]:
                    danger = p[2]
                myloop(p[1], tmp, danger)
    myloop()
    return ret

print(min(path(3, [0, 0, 1, 2], [1, 2, 3, 3], [1, 2, 3, 4]), key=lambda x: x[1]))
# 结果：
# ([0, 1, 3], 3)
def path(end,x,y,w):
    paths = list(zip(x, y, w))
    res = []
    def search(start, danger):
        # station表示当前位置, danger表示危险值
        for p in paths:
            # 如果当前的路径包含终点就结束搜索
            if p[0] == start and p[1] == end:
                if danger < p[2]:
                    danger = p[2]
                res.append(danger)
            # 否则就把当前的危险值和最大值比较，如果比最大值大那么就替换掉当前的最大值
            elif p[0] == start:
                if danger < p[2]:
                    danger = p[2]
                search(p[1], danger)
    search(0,0)
    # 返回危险值的最大值
    return res[0]

print(path(3, [0, 0, 1, 2], [1, 2, 3, 3], [1, 2, 3, 4]))